package net.wofly.right.service;

import net.wofly.common.persistence.PageWrapper;
import net.wofly.common.util.ReturnBean;
import net.wofly.right.domain.FuncList;
import net.wofly.right.domain.RightConfig;
import net.wofly.right.domain.Role;
import net.wofly.right.domain.User;

import java.util.List;

public interface IRoleService {

	/**
	 * 增加或修改
	 * 
	 * @param entity
	 * @return
	 */
	Role save(Role entity);

	/**
	 * 删除
	 * 
	 * @param entity
	 * @return
	 */
	void delete(Role entity);

	/**
	 * 根据主键ID删除
	 * 
	 * @param key
	 * @return
	 */
	void delete(String key);

	/**
	 * 根据主键查询
	 * 
	 * @param key
	 * @return
	 */
	Role findOne(String key);

	/**
	 * 增加或修改多个对象
	 *
	 * @param entityList
	 * @return
     */
	List<Role> save(List<Role> entityList) ;
	
	/**
     * 获取客户类型
     *
	 * @return
     */
    ReturnBean<List<Role>> getCustomType() ;

	/**
	 * 获取角色列表
	 *
	 * @return
     */
	ReturnBean<List<Role>> getAllRole();

	/**
	 * 添加或修改角色
	 *
	 * @param roleID
	 * @param roleName
	 * @param warehouseFlag
	 * @param warehouseType
     * @return
     */
	ReturnBean<Role> saveRole(String roleID, String roleName, Integer warehouseFlag, Integer warehouseType);


	/**
	 * 获取角色下人员列表
	 *
	 * @param roleID
	 * @param pageNum
	 * @param pageSize
     * @return
     */
	ReturnBean<PageWrapper<User>> getUserByRoleID(String roleID, Integer pageNum, Integer pageSize);

	/**
	 * 根据角色ID和功能类型获取菜单功能列表
	 *
	 * @param roleID
	 * @param funcType
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	ReturnBean<PageWrapper<FuncList>> getFuncListByRoleID(String roleID, Integer funcType, Integer pageNum, Integer pageSize);

	/**
	 * 添加角色功能关系
	 *
	 * @param roleID
	 * @param funcListID
     * @return
     */
	ReturnBean<RightConfig> addRightConfig(String roleID, String funcListID);
	
	/**
	 * 批量添加角色功能关系
	 *
	 * 
	 * @param rightConfigs
	 * @return
	 */
	ReturnBean<String> addRightConfigList(List<RightConfig> rightConfigs);

	/**
	 * 删除角色与功能关系
	 *
	 * @param roleID
	 * @param funcListID
     * @return
     */
	ReturnBean<RightConfig> removeRightConfig(String roleID, String funcListID);
	
	/**
	 * 
	 * 批量删除角色与功能关系
	 *
	 * 
	 * @param rightConfigIDs
	 * @return
	 */
	ReturnBean<String> removeRightConfigList(List<String> rightConfigIDs);
}
